Seu terminal pode ser muito, muito mais produtivo
Que tal reduzir drasticamente o tempo gasto em tarefas rotineiras? 😉
Nosso objetivo
Um terminal que praticamente preveja o que você vai digitar, te economize vários comandos repetitivos (como o git status), te dê um autocomplete absurdo, te permita achar um arquivo com CTRL+T que nem no seu editor/IDE preferido e que ainda tenha um visual lindo!
Os prints abaixo terão aparência diferente do vídeo acima porque criei uma vm limpa (ou quase, mudei o tema rsrs) de uma recém-instalada spin do Fedora, para garantir que não esqueceria de nada.
Apesar de ter sido feito originalmente no Fedora, em teoria este artigo deverá funcionar em qualquer distro Linux (se abusar até no MacOS)..
Update: o Marc Pires e o Beto Alves me confirmaram que funciona no MacOS (aqui e aqui, respectivamente) também! 😆
Por favor, não se preocupe com nomes de ferramentas/conceitos que talvez você ainda não tenha ouvido falar, apenas vá acompanhando “a lógica da coisa” e verá que é simples 🙂
Começando
1°) ZSH. Por hora, tudo o que você precisa saber sobre ele é que ele é um interpretador de comandos (shell) absurdamente personalizável (e que nos permitirá chegar ao resultado desejado).
Em todos sistemas que usei/testei, o pacote para ele se chama zsh mesmo, então basta instalá-lo com o gerenciador de pacote do seu sistema:
Fedora: dnf install zsh
Arch: yaourt -S zsh
*SUSE: zypper in zsh
Ubuntu: apt install zsh
*BSD: pkg install zsh bash
2°) Oh My Zsh: basicamente vai pré-configurar o ZSH por você (no processo ele irá solicitar sua senha, mas é apenas para configurar o ZSH como seu shell padrão):
curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh; zsh
Você deverá estar vendo essa tela agora:


Se não aparecer a mensagem “Shell changed.” logo antes da logo como na tela acima, pode ser que o script não tenha conseguido alterar seu shell ou talvez tivesse um erro na senha; nesse caso, basta você mesmo alterá-lo:
sudo usermod
--shell $(which zsh) <seu_usuario>
Detalhe,
isso vai valer para as próximas sessões. Caso não queira
parar e fechar tudo o que está fazendo por conta de
fazer logout/login novamente, basta executar zsh
no seu terminal caso
ele não entre diretamente nesse shell acima (ao abrir
uma nova aba ou instância do terminal, por exemplo).
Ok,
agora você já tem um autocomplete absurdo! Experimente
digitar git
<comando> (ou algum outra coisa que você
costuma usar no dia-a-dia) e apertar <TAB> duas
vezes para ver a lista de opções disponíveis:


Se de alguma forma o comando/programa que você tiver tentado não tiver oferecido muitas sugestões, provavelmente o Oh My Zsh terá um plugin para ele.
Para habilitar um plugin (tanto os desse link acima quanto os que veremos mais abaixo), basta adicionar o nome dele na linha “plugins” do arquivo “.zshrc” que foi criado em sua pasta pessoal (“~/.zshrc”). Por exemplo, para habilitar o plugin “dnf”:


A partir de agora vamos partir para duas vertentes: a parte funcional e a parte visual. Em ambas, se quiser ver a feature recém-adicionada funcionado, basta fechar o terminal e abri-lo novamente ou abrir uma nova aba em seu terminal.
Funcional — vamos colocar (muito) mais recursos nele!
1°) zsh-syntax-highlighting: basicamente vai deixar o comando verde se tiver sido digitado corretamente, ou do contrário, vermelho. E ao digitar um caminho, ele ficará sublinhado caso o arquivo/diretório existir.
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
Daí
adicione zsh-syntax-highlighting
na lista de plugins do seu “~/.zshrc”


Daí você terá algo como isto:


2°) zsh-autosuggestions: vai sugerir comandos baseados no seu histórico.
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
Daí
adicione zsh-autosuggestions
na lista de plugins do seu “~/.zshrc”:


A partir de agora ele vai sugerir comandos baseados em seu histórico:


3°) fzf: um fuzzy finder (buscador de arquivos) direto no terminal!!
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install
Lembre-se de responder “y” para as questões que serão feitas!


Pronto, agora você poderá usar Ctrl+T quando precisar procurar por arquivos, que nem você faria no seu editor:


Sugestão (opcional): habilite o suporte ao .gitignore para filtrar os arquivos e acelerar (muito) a busca 😜
Ah, e um adicional: similar à busca por arquivos, agora você poderá procurar comandos no histórico também, com Ctrl+R!


Visual — veja bem essa parte:
1°) Nerd Fonts: um “agregador de fontes icônicas”, com algumas fontes monoespaçadas alteradas para suportar ícones! Vá na sessão Downloads e baixe a variante da fonte que você gostar mais (pessoalmente gosto muito da Hack para usar no terminal, até porque ela foi feita pra isso).


Agora basta extrair o conteúdo dessa pasta em ~/.fonts:
mkdir ~/.fonts && cd ~/.fonts
unzip ~/Downloads/<fonte_que_voce_escolheu>.zip
E então escolha-a nas configurações de seu terminal (isso costuma variar, mas geralmente algo como Preferências->Aparência->Fonte):


Isso irá permitir a exibição de ícones em seu terminal!!
2°)
Powerlevel9k: um
tema que se integra lindamente ao git, suporta os ícones
instalados no passo anterior e vai poupar alguns
comandos repetitivos como o clássico git
status só pra conferir se tem algo alterado no
repo 😆
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
Daí
troque o ZSH_THEME
no seu “~/.zshrc” para powerlevel9k/powerlevel9k
para habilitá-lo como tema e adicione POWERLEVEL9K_MODE="nerdfont-complete"
para habilitar os ícones:



Feche e reabra o terminal e voi lá!


Por padrão ele exibe seu_usaurio@host, seguido do diretório atual (com informações do status do projeto no git, se for o caso, que nem na segunda linha acima) e ao lado direito o status do último comando, seguido pelo “id” do último comando no histórico e a hora atual.
Mas isso é absurdamente personalizável! Dá pra colocar pra exibir até versões de langs em seu sistema, quantidade de ram usada, load average, code coverage e muuuito mais! Todas as opções disponíveis (e são muitas) podem ser encontradas aqui -> https://github.com/bhilburn/powerlevel9k#prompt-customization
Basta
adicionar POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
= (...elements) e POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
= (...elements) no seu “~/.zshrc” logo após o POWERLEVEL9K_MODE:


E reabrir o terminal, daí pronto! Terá o terminal como você tiver configurado:


Ah, e conforme você fizer ações num projeto, ele vai alterando as cores e os ícones pra você saber quando tiver algum arquivo modificado, deletado, adicionado, um stash, commits para baixar, commits para enviar, em qual server está seu origin, em qual branch você está..


Se quiser algumas ideias, dê uma olhada no Show-Off-Your-Config deles, tem personalizações incríveis lá 😉
Bônus round
1°)
Aliases:
sabe aqueles comandos que você digita com alguma
frequência? Além do autocompleter, você também pode
criar “apelidos” para eles de apenas uma letra! O Oh My
Zsh por exemplo já vem com g
como alias para git ,
daí você pode adicionar mais no seu “~/.zshrc” usando a
sintaxe:
alias c="comando"
Alguns dos alias que uso e acho bem úteis:
alias d="sudo docker"
alias m="mysql -u root -p"
alias vi="vim"
alias y="yarn"
alias yrw="yarn run watch"
alias yrp="yarn run prod"
Só lembrando que alguns plugins já adicionam aliases para você (como o dnf e o composer) 😬
2°) Tilix: um app de terminal super leve, com suporte à tiling e alguns dos principais temas de hoje já “built-in”:


3°)
Notificações:
habilitando o plugin “bgnotify” (que já vem com o Oh My
Zsh), quaisquer comandos que sejam concluídos enquanto o
terminal não estiver focado irão emitir uma notificação
no desktop (super útil pra geradores de projetos, como laravel new
<project>, npx
create-react-app <project> e atualizações
de dependências, como composer
update ou yarn
upgrade):


Disclaimer para usuários “avançados”
Provavelmente vieram ideias à sua mente enquanto lia (tipo comparações com o Fish e configurações mais “complexas” de alguns dos itens); não mencionei tudo pra não acabar com um artigo enorme.. Mas por favor, fique à vontade para colocar elas nos comentários abaixo!
Para usuários do Fish
O mais próximo disso que consegui nele foi usar o Oh My Fish com o tema “bobthefish”:
curl -L oh-my.fish | fish
omf install bobthefish
Mas ainda assim não fica com todos os recursos descritos aqui 😝
Concluindo
Essencialmente espero que você reduza drasticamente a quantidade de teclas que você aperta para fazer tarefas cotidianas e acelere muito seu dia-a-dia 😎